#ifndef _FILE_OP_H_
#define _FILE_OP_H_

#include "common.h"

namespace tfs{
    namespace largefile{
        class FileOperation{
        public:
            FileOperation( const std::string &file_name , const  int open_flags = O_CREAT | O_RDWR | O_LARGEFILE );
            ~FileOperation();

            int open_file();
            void close_file();

            int flush_file();  // 将文件立即写入到磁盘

            int unlink_file(); // 删除文件
            
            virtual int pread_file(char *buf ,const int32_t nbytes ,const int64_t offset);  // 精细化的读写
            virtual int pwrite_file(const char* buf ,const int32_t nbytes ,const int64_t offset);

            int write_file(const char*buf ,const int32_t nbytes );

            int64_t get_file_size();

            int ftruncate_file( const int64_t lenght );   // 将文件截断
            int seek_file(const int64_t offset);          // 移动文件指针到指定的偏移位置

            int get_fd()const{
                return fd_;
            }

        protected:
            int fd_ ; 
            int open_flags_ ;
            char *file_name_;

            int  check_file( );

        protected:
            static const mode_t OPEN_MODE = 0644;  // 文件权限
            static const int MAX_DISK_TIMES = 5;   // 磁盘最大读取次数        
        };
    }
}


#endif // FILE_OP_H_